<?php 
declare (strict_types = 1);
namespace app\api\controller;
use think\facade\Db;
use think\facade\Request;
use think\Collection;
use app\models\Clb;
use app\models\Clb_bak;
// check0：自动停止检票
// check1：开始检票：输入报班卡号
// check2：停止检票
// check3：退检
// check51：检票成功后返回前端显示的数据
// check52：是报班卡号不为空的情况，固定车是否可以混检的情况都包括
// check01,check02：判断输入的报班卡号和车票编号是否在数据库中
// check03：开始检票（总）：输入车票编号
// check6：第一次打单和打空单
// check7：第二次打单
// check8：打印结算单是先查询此车辆的最后一个班次
// check9：打印结算单（总）
// bbkh=9000206 jpk=3 cpbh=69817187  69817186 固定
// bbkh=9000410 jpk=4
class CheckTickets{
	// 自动停止检票
    // 当rqsj>$showtime时
    // 目前使用的自动停止检票是在每一次开始检票成功后自动判断一次是否有车辆停止检票
	public function check0(){
		$showtime=date("Y-m-d H:i:s");
		$aaa=Db::table('U_clb')
        ->where('fcsj','<',$showtime)
        ->update(['jpzt'=>'停检']);
        dump($aaa);
    }
    	
 //   开始检票 
 //   用判断在发车之前才可以车辆开始检票嘛？已写
 //   如何判断，车辆表中的检票口是否和配置文件中的一致
 //   如何判断此检票口上的同一线路不能同时检票
 //   $bbkh='002536',用$bbkh['bbkh']取值
    public function check1(){
		$bbkh=Request::instance()->post();
    	$conjpk=3;
    	$showtime=date("Y-m-d H:i:s");
    	$check1=Db::table('U_clb l')
    	->join('U_xlb x','l.xlbh=x.xlbh')
    	->where('bbkh',$bbkh['bbkh'])
    	->field('l.cpzh,l.fcsj,l.czxm,l.zwgs,x.xlmc,l.bbkh,l.syzw,l.xlbh,l.bclx,l.jpzt,l.clzt,l.xlbh,l.ssgs,l.fcsj,l.jpk')
    	->select()
    	->toArray();
    	dump($check1);
    	//echo '输入报班卡号链表查出的数据'.$check1;
        // 判断此检票口上的同一线路不能同时检票    	
    	$check12=Db::table('U_clb')
    	->where([['jpzt','=','在检'],['jpk','=',$conjpk],['xlbh','=',$check1[0]['xlbh']],['bbkh','<>',$bbkh['bbkh']]])
    	->select()
    	->toArray();
    	dump($check12);
    	//echo '是否有相同线路的在检车辆'.$check1;
    	//如果$check12不为空则说明同一线路有其他车辆在检
    	if($check12)
			{
                return json([
                    'code' => '1000009',
                    'msg' => '该检票口已有同线路车在检',
                ]);
            }
    	else{
           //若没有同线路的车在检，则开始判断检票口等
			    foreach ($check1 as $key => $value)
			    {
			      	//如果车辆状态为已报，并且发车时间在当前时间之后，再开始判断检票状态
			      	if($value['jpk']==$conjpk)
			      	{
			          if($value['clzt']=='已报' && $value['fcsj']>=$showtime)
			          {
			          	 if($value['jpzt']=='未检' || $value['jpzt']=='停检' )
			          	 {

						            $res=Db::table('U_clb')
						          	->where('bbkh',$bbkh['bbkh'])
                                      ->update(['jpzt'=>'在检']);
                                      $check=$this->check0();
                                       return json($check1);
                                       //开始检票成功后，执行check0进行判断是否有车辆到发车时间了自动停止检票
                                      
                                       

			          	  }

			          	 else{  
                            return json([
                                'code' => '1000009',
                                'msg'  => '该车正在检票',
                            ]);}				
			          }

			           else{
                        return json([
                            'code' => '1000009',
                            'msg'  =>'该车未报班或该车已发车' ,
                        ]);}
			          		
			        }
			        
			        else{
                        return json([
                            'code' => '1000007',
                            'msg'  =>'该车未在此检票口' ,
                        ]);}
			    }     		
          // 停止检票后打印结算单后变成车辆未报班      	
	        }  		
}

//  停止检票(未写自动停检)
//  还要写加班儿车辆停止检票后从bak表还回去
//  如何写自动判断发车时间大于当前时间则改为停检？
//  $bbkh='9001803'
	public function check2(){
		$bbkh=Request::instance()->post();
		$check2=Db::table('U_clb')
    	->where('bbkh',$bbkh['bbkh'])
    	->field('jpzt','fcsj') 
    	->select();	
    	//echo $check2[0]['jpzt'];
        if($check2[0]['jpzt']=='在检' )
         {  	
                $res=Db::table('U_clb')
           	    ->where('bbkh',$bbkh['bbkh'] )
          	    ->update(['jpzt'=>'停检']);
             //改为停检后，将前端显示的json信息删除
             return json([
                'code' => '1000007',
                'msg'  =>'车辆已停捡',
            ]);
           
         }else if ($check2[0]['jpzt'] =='未检')
          	 {
                return json([
                    'code' => '1000007',
                    'msg'  =>'该车未开始检票' ,
                ]);
          	 } 
          	 else 
          	 	{ return json([
                    'code' => '1000007',
                    'msg'  =>'该车已停检' ,
                ]);}
          	 //停检之后如何变成未检？
}

// 判断是否是加班车辆
    public function check4(){
        //停检之后判断此车是否在bak表中
        //U_clb_bak
        $bbkh=Request::instance()->post();
        $res=Db::table('U_clb_bak')
             ->where('bbkh',$bbkh['bbkh'])
             ->select();
             dump($res);
             //如果bak表中存在此车则
             if($res){
               //	$bbkh = '9002714';
         //事务
        Db::startTrans();
      $a=Clb::where('bbkh',$bbkh['bbkh'])->delete();
      $c=Clb_bak::field('')
          ->where(['bbkh'=>$bbkh]['bbkh'])
          ->select();
           foreach ($c as $key => $value) {
          $a=Clb::insert([
           'bbkh'   => $value['bbkh'],
           'czxm'   => $value['czxm'],
           'cpzh'   => $value['cpzh'],
           'zwgs'   => $value['zwgs'],
           'ssgs'   => $value['ssgs'],
           'xlbh'   => $value['xlbh'],
           'jpk'    => $value['jpk'],
           'bclx'   => $value['bclx'],
           'cldc'   => $value['cldc'],
           'clzt'   => $value['clzt'],
           'bcbh'   => $value['bcbh'],
           'bbsj'   => $value['bbsj'],
           'fcsj'   => $value['fcsj'],
           'tpsl'   => $value['tpsl'],
           'syzw'   => $value['syzw'],
           'jpzt'   => $value['jpzt'],
           'tbyy'   => $value['tbyy'],
           'acount' => $value['acount'],
           'tbzt'   => $value['tbzt'],
          ]);
          }
          $b=Clb_bak::where('bbkh',$bbkh['bbkh'])->delete();
        if($a && $b && $c){
            
            DB::commit();
            return json([
                'code' => '1000009',
                'msg'  => '操作成功取消加班车俩',
            ]);
        }else{
           
            DB::rollback();
             return json([
                'code' => '1000009',
                'msg'  => '操作失败没有取消加班车俩',
            ]);

            }
      }
             }



//  退检
//  发车后可以退检，为了换乘
//  jpfs为流水或者固混的需要推荐后还座位syzw。
//  $cpbh='123456789'
   public function check3(){
	    $cpbh=Request::instance()->post();
   	    //$showtime=date("Y-m-d H:i:s");
		$check3=Db::table('U_cpb')
    	->where('cpbh',$cpbh['cpbh'])
    	->field('sfjp,cljs,bbkh,jpfs') 
    	->select()
		->toArray();
		dump($check3);
        
        if($check3[0]['sfjp']=='已检' && $check3[0]['cljs']=='未结' )
    	 {
    	 	 $res=Db::table('U_cpb')
          	 ->where('cpbh',$cpbh['cpbh'])
			 ->update(['sfjp'=>'未检']);
			//jpfs为流水或者固混的需要推荐后还座位syzw。
			if($check3[0]['jpfs']=='固混' || $check3[0]['jpfs']=='流水')
			 {
                 $g5=Db::table('U_clb')
                 ->where('bbkh','=',$check3[0]['bbkh'])
                 ->Inc('syzw')
                 ->update();
             }
            //改为停检后，将前端显示的json信息删除
            return json([
                'code' => '1000009',
                'msg'  => '退检成功',
            ]);
         }
        else{
            return json([
                'code' => '1000009',
                'msg'  => '该车票未检票',
            ]);
          	}
}

//  检票
//  输入车票编号
//  先判断是否有报班卡号来确定是否是可混检，固定车可混检，并且混检线路均在同一检票口，流水车不混检，有报班卡号 为流水车无混检
//  首先查出一个数据：检票成功后需要返回的json数据
//  $cpbh='123456789'

//  检票成功后返回前端显示的数据
        public function check51(){
            $cpbh=Request::instance()->post();
                $check51=Db::table('U_cpb') 
                ->field('bbkh,mdcz,cpzt,jpk,zwh,cpbh')
                ->where('cpbh','=',$cpbh['cpbh'])
                ->select();
                echo '检票成功后需要返回的json数据'.$check51;
                //dump($check51);
                return json([
                    'code' => '1000009',
                    'msg'  => $check51,
                ]);
            
        }
        // 然后输入车票编号
        // $cpbh='123456789'
        // 首先判断此车票是否有报班卡号
        // check52是报班卡号不为空的情况，固定车是否可以混检的情况都包括
        public function check52(){
            //如果有车票编号返回来，若没有，提示车票错误。
            $cpbh=Request::instance()->post();
            //$cpbh=$this->check0();
            dump($cpbh); 
            //$cpbh=Request::instance()->post();
            //dump($cpbh['cpbh']);
                $conjpk=3;
                $check52=Db::table('U_cpb p') 
                ->join('U_clb l','p.bbkh=l.bbkh')
                ->field('l.cpzh,p.bbkh,p.jpk,p.cpzt,p.sfjp,p.xlbh as pxlbh,p.khjxl,l.xlbh as lxlbh,l.jpzt,p.bcbh as pbcbh,l.bcbh as lbcbh')
                ->where('p.cpbh','=',$cpbh['cpbh'])
                ->select()
                ->toArray();
                echo'车票和车辆通过报班卡号链表查询';
                dump($check52);
                
                //如果有报班卡号，固定票，可混检
                //  $jpk=$check52[0]['jpk']!=$conjpk;
                //  $cpzt=$check52[0]['cpzt']='正常';
                //  $sfjp=$check52[0]['sfjp']!='未检';
                //首先判断车票编号是否在数据库中
                switch($check52){
                    case $check52[0]['jpk']!=$conjpk:
                        //echo'检票口有错误';
                        return json([
                            'code' => '1000009',
                            'msg'  => '检票口的错误',
                        ]);
                   break;

                    case $check52[0]['cpzt']!='正常':
                        echo'车票状态不正常';
                        return json([
                            'code' => '1000009',
                            'msg'  => '车票状态不正常',
                        ]);
                    break;

                    case $check52[0]['sfjp']!='未检':
                        echo'该车票已检到车牌照号为：'.$check52[0]['cpzh'].'的车上了';
                        return json([
                            'code' => '1000009',
                            'msg'  =>'该车票已检到车牌照号为：'.$check52[0]['cpzh'].'的车上了',
                        ]);
                    break;

                    case $check52[0]['jpzt']=='停检':
                        echo '你误车啦~该车已停止检票';
                        return json([
                            'code' => '1000009',
                            'msg'  =>'你误车啦~该车已停止检票',
                        ]);
                    break;

                    case $check52[0]['jpzt']=='未检':
                        echo '你来早了~该车还未开始检票';
                        return json([
                            'code' => '1000009',
                            'msg'  =>'你来早了~该车还未开始检票',
                        ]);
                    break;

                    case $check52[0]['pxlbh']==$check52[0]['lxlbh'] && $check52[0]['pbcbh']==$check52[0]['lbcbh']:
                    //到这儿，校对完线路编号后，该车为固定车已经可以检到此车上，下面更新信息
                    $g1=Db::table('U_cpb')
                    ->where('cpbh','=',$cpbh['cpbh'])
                    ->update(['sfjp'=>'已检',
                              'jpfs'=>'固定']);
                    echo '检票成功';
                    //成功后执行check51返回数据到前端
                    $succeed_data=$this->check51();
                    return $succeed_data;
                    break;
                    //只有线路编号和班次编号同时满足的情况下才可以检票成功。一个不满足则开始考虑混检
                    //  case $check52[0]['pbcbh']!=$check52[0]['lbcbh']:
                    //  echo '您与该车辆的班次编号不符'; 
                    //  break;

                    //正常检票完成，若不成功执行下面的：开始考虑混检，
                    case $check52[0]['khjxl']==null:
                    echo '该车票与此车线路编号不符，您无车可上了，请咨询柜台小姐姐'; 
                    return json([
                        'code' => '1000009',
                        'msg'  =>'上车失败',
                    ]);
                    break;   
                    //用车票的可混检线路在车辆表找，检票口一样，线路编号一样，并且是在检的车辆，剩余的作为个数大于0的，即可混检
                    case $check52[0]['khjxl']!=null:
                         $g2=Db::table('U_clb')
                         ->field('cpzh,bbkh,bcbh')
                         ->where([['xlbh','=',$check52[0]['khjxl']],
                                 ['jpzt','=','在检'],
                                 ['jpk','=',$conjpk],
                                 ['syzw','>','0']])
                         ->select()
                         ->toArray();
                        //如果$g2不为空则检此票，若为空则跳出，没有符合条件的混检车辆
                        //先查询是否符合混检条件的车辆，如果$g2为空，则没有混检车，不执行    
                        if($g2){
                            //车票更新为已检
                            //jpfs更新为固混，方便退检的时候，还座位
                            $g3=Db::table('U_cpb')
                            ->where('cpbh','=',$cpbh['cpbh'])
                            ->update(['sfjp'=>'已检',
                                    'bbkh'=>$g2[0]['bbkh'],
                                    'bcbh'=>$g2[0]['bcbh'],
                                    'jpfs'=>'固混'
                                     ]);
                            //车辆剩余座位-1
                            $g4=Db::table('U_clb')
                            ->where([['xlbh','=',$check52[0]['khjxl']],
                                    ['jpzt','=','在检'],
                                    ['jpk','=',$conjpk],
                                    ['syzw','>','0']])
                            ->dec('syzw')
                            ->update();
                            echo '混检成功，您已经检到了'.$g2[0]['cpzh'].'的车上';
                            $succeed_data=$this->check51();
                            return $succeed_data;
                        break;
                        }else{
                            //原报班卡号或班次编号对不上，并且混检车也没有符合条件的了
                            echo '没有符合条件的车了';
                            return json([
                                'code' => '1000009',
                                'msg'  =>'没有符合条件的车了',
                            ]);
                        break;
                        }
                    default :
                    echo '你无车可上了';
                }
}                

//  判断输入的报班卡号和车票编号是否在数据库中
//  $cpbh='123456789'
        public function check01(){
            $cpbh=Request::instance()->post();
            $check01=Db::table('U_cpb') 
            ->field('cpbh')
            ->where('cpbh','=',$cpbh['cpbh'])
            ->select()
            ->toArray();
            dump($check01);
            if($check01){
            return $cpbh['cpbh'];
            }else{
                return '车票编号输入错误';
            }
        }
        public function check02(){
            $bbkh=Request::instance()->post();
            $check0=Db::table('U_clb') 
            ->field('bbkh')
            ->where('bbkh','=',$bbkh['bbkh'])
            ->select();
            dump($check0);
            
            if($check0){
                return $cpbh['cpbh'];
            }else{
                return '报班卡号输入错误';
            }
        }
        //必须有bbkh的情况下才能查到值
        //$cpbh='123456789'
        //总的开始检票执行03
        public function check03(){   
            $conjpk=3;
            $cpbh=$this->check01();
            $check2=Db::table('U_cpb') 
                   ->field('bbkh,jpk,cpzt,sfjp,xlbh')
                   ->where('cpbh','=',$cpbh)
                   ->select()
                   ->toArray();
                   dump($check2);
                //如果有报班卡号执行$check52
                if($check2[0]['bbkh']){
                  $abc=$this->check52();
                   return $abc;
                }
                //没有报班卡号和班次编号时可视为流水票，没有混检，直接检查线路编号即可
                else{
                echo '无报班卡号';
                switch(1){
                    case $check2[0]['jpk']!=$conjpk:
                    echo'检票口错误';
                    return json([
                        'code' => '1000009',
                        'msg'  => '检票口的错误',
                    ]);
                    break;

                    case $check2[0]['cpzt']!='正常':
                    echo'车票状态不正常';
                    return json([
                        'code' => '1000009',
                        'msg'  => '车票状态不正常',
                    ]);
                    break;
                    //这种情况不可能，没有报班卡号又已检，除非人工修改
                    case $check2[0]['sfjp']!='未检':
                    echo'该车票人工修改为已检';//到车牌照号为：'.$check2[0]['cpzh'].'的车上了
                    return json([
                        'code' => '1000009',
                        'msg'  => '该车票人工修改为已检',
                    ]);
                    break;
                    //流水车查找同线路的，同检票口的在检车辆并且还有剩余座位，相当于固定票的混检
                    case $check2[0]['xlbh']!=null:
                         $g3=Db::table('U_clb')
                         ->field('cpzh,bbkh,bcbh')
                         ->where([['xlbh','=',$check2[0]['xlbh']],
                                 ['jpzt','=','在检'],
                                 ['jpk','=',$conjpk],
                                 ['syzw','>','0']])
                         ->select()
                         ->toArray();
                        //如果$g3不为空则检它，如果为空的话此时没有符合条件的车辆
                        if($g3){
                            //车票更新为已检
                            //jpfs更新为固混，方便退检的时候，还座位
                            $g4=Db::table('U_cpb')
                            ->where('cpbh','=',$cpbh)
                            ->update(['sfjp'=>'已检',
                                    'bbkh'=>$g3[0]['bbkh'],
                                    'bcbh'=>$g3[0]['bcbh'],
                                    'jpfs'=>'流水'
                                    ]);
                                //车辆剩余座位-1
                            $g5=Db::table('U_clb')
                            ->where([['xlbh','=',$check2[0]['xlbh']],
                                    ['jpzt','=','在检'],
                                    ['jpk','=',$conjpk],
                                    ['syzw','>','0']])
                            ->dec('syzw')
                            ->update();
                            echo '流水检票成功，您已经检到了'.$g3[0]['cpzh'].'的车上';
                            $succeed_data=$this->check51();
                            return $succeed_data;
                        break;
                    }
                    default :
                    echo '你无车可上了';
                }
        }

        }

//  打印结算单
//  第一次打单
//  输入报班卡号，查询最大的班次编号
//  $bbkh='2362222'
    public function check6(){
		$bbkh=Request::instance()->post();
    	$kong=0;
    	$showtime=date("Y-m-d");
    	$username='小周';
    	//首先将此报班卡号的最大的班次编号执行check8查出存在$bcbh中
    	$bcbh=$this->check8();
    	//从车票表中表中分组查出符合条件的数据$check6
    	$check6=Db::table('U_cpb p')
    	->join('U_clb l','p.bbkh=l.bbkh')
    	->join('U_xlb x','p.xlbh=x.xlbh')
    	->field('p.bbkh,max(p.rqsj) rqsj,p.mdcz,p.cplx,count(p.cplx) gs,sum(p.pj) pjzs,sum(p.tbpj) tbzs,p.bcbh,l.cpzh,x.ssgs,p.xlbh')
    	->where([['p.bbkh','=',$bbkh['bbkh']],['p.bcbh','=',$bcbh],['p.sfjp','=','已检'],['p.cpzt','=','正常'],['rqsj','like',$showtime.'%']])
    	->group('p.mdcz,p.cplx')
    	->select()
    	->toArray();
    	echo '车票表中分组查出符合条件的数据';
        dump($check6);

     if($check6)//不空：指分组查询的数据不为空，有车票
        {
        	//查出的数据不为空，将数据插入到U_cljsb中
            //并且更新其他表中表中数据

            Db::startTrans();

        	foreach ($check6 as $key => $value){
		    	 $data = [ 
		    	 'bbkh' =>$bbkh['bbkh'],
		    	 'rqsj' => $value['rqsj'],
		    	 'mdzm' => $value['mdcz'],
		    	 'cplx' => $value['cplx'],
		    	 'gs' => $value['gs'],
		    	 'pjzs' => $value['pjzs'],
		    	 'tbzs' => $value['tbzs'],
		    	 'jszt' => '未结',
		    	 'bcbh' => $bcbh,
		    	 'czy' => $username,
		    	 'cpzh' => $value['cpzh'],
		    	 'ssgs' => $value['ssgs'],
		    	 'xlbh' => $value['xlbh']];
		    	// dump($data);
		    	// 插入数据
		    	$a=Db::table('U_cljsb')
		    	->insert($data);
		    	echo '分组数据不空，插入cljs表中是否成功';
		    	dump($a);
		    	//更新各表中数据
		    	//打印结算单之后的更新数据
	       	//需要一个事务：还没写!!
			    $res1=Db::table('U_cpb')
	          	->where([['bbkh','=',$bbkh['bbkh']],
	          			 ['cpzt','=','正常'],
	          			 ['cljs','=','未结'],
	          			 ['sfjp','=','已检'],
	          			 //判断票的时间为当天时间
	          			 ['rqsj','like',$showtime.'%']])
	          	->update(['cljs'=>'已结']);
	          	

	          	$res2=Db::table('U_clb')
	          	->where('bbkh','=',$bbkh['bbkh'])
	          	->update(['clzt'=>'未报']);
	          	

	          	$res3=Db::table('U_jhb')
	          	->where('bcbh','=',$bcbh)
	          	->update(['bczt'=>'已发']);
	          
                //U_autoSubmit为自动报班表，如果是表中的车则修改状态，若不是则不用修改，因此不用放在事务中
	          	$res4=Db::table('U_autoSubmit')
	          	->where('bcbh','=',$bcbh)
	          	->update(['bczt'=>'已发']);
	          	//是否插入成功
	          	echo '更新各表中数据是否成功';
                dump($res1);
                dump($res2);
                dump($res3);
                dump($res4);
   
                if($a && $res1 && $res2 && $res3){
            
                    DB::commit();
                    return json([
                        'code' => '1000009',
                        'msg'  => '第一次有数据打单操作成功',
                    ]);
                }else{
                    DB::rollback();
                     return json([
                        'code' => '1000009',
                        'msg'  => '第一次有数据打单操作失败',
                    ]);
        
                    }

		    	}
        	//return '非空';
        }
     else//空
        {
        	//若查出的数据为空，则需要前端中写提示：是否打印空单：是$kong=1,否$kong=0;
        	//若查出来的为空数据，则提示是否插入空数据，若确定插入空数据，插入
        	//从前端传入数据yes打印空表1，或者no为0,传到$kong
        	//若为空则根据传入的报班卡号重新查询一下cpzh和ssgs
        if($kong)//打印空单
        {
        	$showtime=date("Y-m-d H:i:s");
        	$check7=Db::table('U_clb l')
	    	// ->join('U_clb l','p.bbkh=l.bbkh')
	    	// ->join('U_xlb x','p.xlbh=x.xlbh')
	    	->field('l.cpzh,l.ssgs,l.xlbh')
	    	->where([['l.bbkh','=',$bbkh['bbkh']],['l.bcbh','=',$bcbh]])
	    	->select();
           //查出空单中需要的数据
           echo '查出空单中需要填入的数据';
	    	dump($check7);
		    	 $data = [ 
		    	 'bbkh' =>$bbkh['bbkh'],
		    	 'rqsj' => $showtime,
		    	 'mdzm' => '空单',
		    	 'cplx' => '全票',
		    	 'gs' => '0',
		    	 'pjzs' => '0',
		    	 'tbzs' => '0',
		    	 'jszt' => '未结',
		    	 'bcbh' => $bcbh,
		    	 'czy' => $username,
		    	 'cpzh' => $check7[0]['cpzh'],
		    	 'ssgs' => $check7[0]['ssgs'],
		    	 'xlbh' => $check7[0]['xlbh']];
		    	// dump($data);
                // 打印空单插入数据
                
                Db::startTrans();

		    	$b=Db::table('U_cljsb')
		    	->insert($data);
               echo '打印空单insert插入数据是否成功'; 
		    	dump($b);
		    	//插入数据后，更新各表
		    	//打印结算单之后的更新数据
       	        //需要一个事务：还没写!!
	          	$res1=Db::table('U_clb')
	          	->where('bbkh','=',$bbkh['bbkh'])
	          	->update(['clzt'=>'未报']);
	          	

	          	$res2=Db::table('U_jhb')
	          	->where('bcbh','=',$bcbh)
	          	->update(['bczt'=>'已发']);
	          	
                //U_autoSubmit为自动报班表，如果是表中的车则修改状态，若不是则不用修改，因此不用放在事务中
	          	$res3=Db::table('U_autoSubmit')
	          	->where('bcbh','=',$bcbh)
	          	->update(['bczt'=>'已发']);
	          	 echo '打印空单update更新数据是否成功'; 
                //dump($bbb);
                
                if($b && $res1 && $res2 ){
            
                    DB::commit();
                    return json([
                        'code' => '1000009',
                        'msg'  => '第一次打印空单操作成功',
                    ]);
                }else{
                   
                    DB::rollback();
                     return json([
                        'code' => '1000007',
                        'msg'  => '打印空单操作失败',
                    ]);
        
                    }
	          	
		   }
		    
		else//不打印空单，只更新，不插入
		    	{

                    Db::startTrans();

		    	$res1=Db::table('U_clb')
	          	->where('bbkh','=',$bbkh['bbkh'])
	          	->update(['clzt'=>'未报']);
	          	

	          	$res2=Db::table('U_jhb')
	          	->where('bcbh','=',$bcbh)
	          	->update(['bczt'=>'已发']);
	          	
                //U_autoSubmit为自动报班表，如果是表中的车则修改状态，若不是则不用修改，因此不用放在事务中
	          	$res3=Db::table('U_autoSubmit')
	          	->where('bcbh','=',$bcbh)
	          	->update(['bczt'=>'已发']);

	          	echo '不打印空单，update是否成功';
	          	//dump($res4 and $res3 and $res2);
                }
                
                if($res1 && $res2){
            
                    DB::commit();
                    return json([
                        'code' => '1000007',
                        'msg'  => '不打印空单值更新数据操作成功',
                    ]);
                }else{
                   
                    DB::rollback();
                     return json([
                        'code' => '1000007',
                        'msg'  => '不打印空单只更新数据操作失败',
                    ]);
        
                    }

        }
    	
    }
//  第二次打印结算单 
//  删除第一次打印的结算单根据，报班卡号，班次编号，在同一天
//  再重新统计车票表中的信息插入到cljsb中
//  第二次打单前端提示是否二次打单，是，执行check7
//  $bbkh='2362222'
    public function check7(){
		$bbkh=Request::instance()->post();
    	$showtime=date("Y-m-d");
    	//$r1=$this->check8();
        $bcbh=$this->check8();

        Db::startTrans();

    	$res=Db::table('U_cljsb')
          	->where([['bbkh','=',$bbkh['bbkh']],['bcbh','=',$bcbh],['rqsj','like',$showtime.'%']])
          	->delete();
        echo '删除第一次打单是否成功';              
           dump($res);

        //删除之后为了重新执行第一次打单事务回滚，当删除之后将一次打单的信息重新改回来再执行一次打单   
           //删除之后更新表（存在手动更改等问题再更新一遍，有则更改，无则不更） 
           
       	    $res1=Db::table('U_cpb')
	          	->where([['bbkh','=',$bbkh['bbkh']],
	          			 ['cpzt','=','正常'],
	          			 ['cljs','=','已结'],
	          			 ['sfjp','=','已检'],
	          			 //判断票的时间为当天时间
	          			 ['rqsj','like',$showtime.'%']])
                ->update(['cljs'=>'未结']);  
            $res2=Db::table('U_clb')
	          	->where('bbkh','=',$bbkh['bbkh'])
	          	->update(['clzt'=>'已报']);
	        $res3=Db::table('U_jhb')
	          	->where('bcbh','=',$bcbh)
	          	->update(['bczt'=>'未发']);
            
           //不能删除第一次的则不执行第二次打单
           
           if($res && $res1 && $res2 && $res3){
            DB::commit();
            //删除之后再重新二次打单
            $r1=$this->check6(); 
           return $r1;
            
        }else{
            DB::rollback();
             return json([
                'code' => '1000007',
                'msg'  => '第二次打单操作失败，可能是没有成功删除第一次打单',
            ]);

            }  
                  
                 

    }

//  check8:打印结算单时先查询此车辆的最后一个班次
//  $bbkh='2362222'
    public function check8(){  
		$bbkh=Request::instance()->post();
      	$showtime=date("Y-m-d");
     $check=Db::table('U_clb l')
    	->field('max(l.bcbh) bcbh')
    	//无其他条件只查最大的班次号！['p.sfjp','=','已检'],['p.cpzt','=','正常'],['rqsj','like',$showtime.'%']
    	->where('l.bbkh','=',$bbkh['bbkh'])
    	->select()
    	->toArray();
    	$bcbh=$check[0]['bcbh'];
    	echo '最大的班次编号';dump($bcbh); 
    	return $bcbh;
    } 

//  打印结算单（总）
//  [已报]则为第一次结算，[未报]则为第二次结算
//  $bbkh='2362222'
    public function check9(){
		$bbkh=Request::instance()->post();
    	$res=Db::table('U_clb')
    		->field('clzt')
          	->where('bbkh','=',$bbkh['bbkh'])
          	->select();
		 
			  echo'此车的车辆状态为：'.$res;
		
          	//[已报]则为第一次结算执行$check6
          	//[未报]则为第二次结算执行$check7
          	if($res[0]['clzt']=='已报'){
                  $r1=$this->check6();
                  //执行check4打单之后看是否为加班车辆，如果是，则执行还回去
                  $r3=$this->check4();
                  return $r1;
          	}else{
                  $r2=$this->check7();
                  return $r2;
          	}
    }

}